package com.mall.controller;

import com.mall.domain.dto.ItemPageQueryDTO;
import com.mall.result.PageResult;
import com.mall.result.Result;
import com.mall.domain.dto.ItemDTO;
import com.mall.domain.vo.ItemVO;
import com.mall.service.ItemService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 商品控制器
 * @author 勾新杰
 * @version 1.0
 * @date 2024/11/23 11:11
 */
@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
@Tag(name = "商品管理", description = "商品管理相关接口")
public class ItemController {

    private final ItemService itemService;

    /**
     * 添加商品
     * @param itemDTO 商品传输对象
     * @return 添加商品结果
     */
    @PostMapping("/add")
    @Operation(summary = "添加商品")
    public Result<String> addItem(@RequestBody ItemDTO itemDTO) {
        itemService.addItem(itemDTO);
        return Result.success("添加商品成功");
    }

    /**
     * 启用或者禁用商品
     * @param id 商品id
     * @param status 修改后的状态
     * @return 启用或者禁用商品结果
     */
    @PutMapping("/status/{status}")
    @Operation(summary = "启用或者禁用商品")
    public Result<String> startOrStopItem(Long id, @PathVariable Integer status) {
        itemService.updateStatus(id, status);
        return Result.success("修改商品状态成功");
    }

    /**
     * 根据id查询商品详情
     * @param id 商品id
     * @return 查询商品详情结果
     */
    @GetMapping("/get/{id}")
    @Operation(summary = "根据id查询商品详情")
    public Result<ItemVO> getItemById(@PathVariable Long id) {
        ItemVO itemVO = itemService.getItemById(id);
        return Result.success(itemVO);
    }

    /**
     * 分页查询商品列表
     * @param itemPageQueryDTO 分页查询传输对象
     * @return 分页查询商品列表结果
     */
    @PostMapping("/page")
    @Operation(summary = "分页查询商品列表")
    public Result<PageResult<ItemVO>> page(@RequestBody ItemPageQueryDTO itemPageQueryDTO) {
        PageResult<ItemVO> itemPageResult = itemService.page(itemPageQueryDTO);
        return Result.success(itemPageResult);
    }

    /**
     * 修改商品
     * @param itemDTO 商品传输对象
     * @return 修改成功结果
     */
    @PutMapping("/update")
    @Operation(summary = "修改商品")
    public Result<String> updateItem(@RequestBody ItemDTO itemDTO) {
        itemService.updateItem(itemDTO);
        return Result.success("修改商品成功");
    }

    /**
     * 删除商品
     * @param id 商品id
     * @return 删除商品结果
     */
    @DeleteMapping("/delete/{id}")
    @Operation(summary = "根据id删除商品")
    public Result<String> deleteItem(@PathVariable Long id) {
        itemService.deleteItem(id);
        return Result.success("删除商品成功");
    }

    /**
     * 批量删除商品
     * @param ids 商品id集合
     * @return 批量删除商品结果
     */
    @DeleteMapping("/deleteBatch")
    @Operation(summary = "批量删除商品")
    public Result<String> deleteItemBatch(@RequestParam List<Long> ids) {
        itemService.deleteItemBatch(ids);
        return Result.success("批量删除商品成功");
    }
}
